﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Sistema_Totem.Acceso_a_Datos.IDAOS;
using Sistema_Totem.Clases;
using System.Data;
using System.Data.SqlClient;
using Sistema_Totem.Clases.Fabricas;
using Sistema_Totem.Exepciones;
using Sistema_Totem.Acceso_a_Datos.Exepciones_A.Datos;

namespace Sistema_Totem.Acceso_a_Datos.DAOS
{
    public class DAOInvolucrado : DAOSQLServer, iDAOInvolucrado
    {
        
        #region Grupo Login y Proyecto

        private Conexion _conexion = new Conexion();
        private SqlCommand _comando = new SqlCommand();
        private SqlDataReader _lectorConsulta = null;
        private List<Entidad> _involucrados = null;
        private Entidad _miInvolucrado;

        public List<Entidad> ConsultarInvolucrados()
        {
            _involucrados = new List<Entidad>();

            try
            {
                _conexion.AbrirConexionBd();

                _comando.Connection = _conexion.ObjetoConexion();

                _comando.CommandType = CommandType.StoredProcedure;

                _comando.CommandText = "[dbo].[ConsultarTodosLosInvolucrados]";
                _comando.CommandTimeout = 10;

                _lectorConsulta = _comando.ExecuteReader();

                while (_lectorConsulta.Read())
                {
                    _miInvolucrado = FabricaEntidad.CrearInvolucrado();

                    (_miInvolucrado as Involucrado).Nombre = _lectorConsulta.GetString(0);

                    _involucrados.Add(_miInvolucrado);
                }

                _lectorConsulta.Close();

            }
            catch (SqlException)
            {
                throw new ErrorConexionException();
            }
            finally
            {
                _conexion.CerrarConexionBd();
            }

            if (_involucrados.Count == 0)
            {
                throw new ListadoVacioInvolucradosException();
            }
            else

                return _involucrados;
        }        

        #endregion

        public List<Entidad> ConsultarInvolucradosProyecto(int _idProyecto)
        {
            _involucrados = new List<Entidad>();

            try
            {
                _conexion.AbrirConexionBd();

                _comando.Connection = _conexion.ObjetoConexion();

                _comando.CommandType = CommandType.StoredProcedure;

                _comando.CommandText = "[dbo].[ConsultarInvolucradosProyecto]";
                _comando.Parameters.AddWithValue("@idProyecto", _idProyecto);
                _comando.CommandTimeout = 10;

                _lectorConsulta = _comando.ExecuteReader();

                while (_lectorConsulta.Read())
                {
                    _miInvolucrado = FabricaEntidad.CrearInvolucrado();

                    (_miInvolucrado as Involucrado).Nombre = _lectorConsulta.GetString(0);

                    _involucrados.Add(_miInvolucrado);
                }

                _lectorConsulta.Close();

            }
            catch (SqlException)
            {
                throw new ErrorConexionException();
            }
            finally
            {
                _conexion.CerrarConexionBd();
            }

            if (_involucrados.Count == 0)
            {
                throw new ListadoVacioInvolucradosException();
            }
            else

                return _involucrados;
        }

        public List<Entidad> ConsultarInvolucradosNoProyecto(int _idProyecto)
        {
            _involucrados = new List<Entidad>();

            try
            {
                _conexion.AbrirConexionBd();

                _comando.Connection = _conexion.ObjetoConexion();

                _comando.CommandType = CommandType.StoredProcedure;

                _comando.CommandText = "[dbo].[ConsultarInvolucradosSistema]";
                _comando.Parameters.AddWithValue("@idProyecto", _idProyecto);
                _comando.CommandTimeout = 10;

                _lectorConsulta = _comando.ExecuteReader();

                while (_lectorConsulta.Read())
                {
                    _miInvolucrado = FabricaEntidad.CrearInvolucrado();

                    (_miInvolucrado as Involucrado).Nombre = _lectorConsulta.GetString(0);

                    _involucrados.Add(_miInvolucrado);
                }

                _lectorConsulta.Close();

            }
            catch (SqlException)
            {
                throw new ErrorConexionException();
            }
            finally
            {
                _conexion.CerrarConexionBd();
            }

            if (_involucrados.Count == 0)
            {
                throw new ListadoVacioInvolucradosException();
            }
            else

                return _involucrados;
        } 
    }
}